package com.smec.moblie.crash;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class AndroidUtil {
	/**
	 * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
	 */
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}

	/**
	 * 根据手机的分辨率从 dp 的单位 转成为 px(像素)
	 */
	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}

	/**
	 * 获取两个日期之间的间隔天数
	 *
	 * @return
	 */
	public static int getGapCount(String start, String end) {
		DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd");
		DateFormat df2 = new SimpleDateFormat("yyyy.MM.dd");
		Date startDate = null;
		Date endDate = null;
		try {
			startDate = df1.parse(start);
			endDate = df2.parse(end);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		Calendar fromCalendar = Calendar.getInstance();
		fromCalendar.setTime(startDate);
		fromCalendar.set(Calendar.HOUR_OF_DAY, 0);
		fromCalendar.set(Calendar.MINUTE, 0);
		fromCalendar.set(Calendar.SECOND, 0);
		fromCalendar.set(Calendar.MILLISECOND, 0);

		Calendar toCalendar = Calendar.getInstance();
		toCalendar.setTime(endDate);
		toCalendar.set(Calendar.HOUR_OF_DAY, 0);
		toCalendar.set(Calendar.MINUTE, 0);
		toCalendar.set(Calendar.SECOND, 0);
		toCalendar.set(Calendar.MILLISECOND, 0);

		return (int) ((toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (1000 * 60 * 60 * 24));
	}

	public static int compare_date(String DATE1, String DATE2) {

		DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
		try {
			Date dt1 = df.parse(DATE1);
			Date dt2 = df.parse(DATE2);
			if (dt1.getTime() > dt2.getTime()) {
				return 1;
			} else if (dt1.getTime() < dt2.getTime()) {
				return -1;
			} else {
				return 0;
			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return 0;
	}

	public static long workingHours(String DATE1, String DATE2) {

		DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
		try {
			Date dt1 = df.parse(DATE1);
			Date dt2 = df.parse(DATE2);
			long hours = dt2.getTime() - dt1.getTime();
			if (hours == 0) {
				return 1;
			}
			return hours / 1000 / 60 / 60 / 24;
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return 0;
	}

	/** 获取当前网络时间 */
	public static String getTime() {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd");
		Date curDate = new Date(System.currentTimeMillis());
		String str = formatter.format(curDate);
		return str;
		// URL url;
		// SimpleDateFormat sf = null;
		// try {
		// url = new URL("http://www.bjtime.cn");
		// URLConnection uc = url.openConnection();
		// uc.connect();
		// long ld = uc.getDate();
		// Date date = new Date(ld);
		// @SuppressWarnings("deprecation")
		// Date d = new Date(date.getTime() + "");
		// sf = new SimpleDateFormat("yyyy.MM.dd");
		// return sf.format(d);
		//
		// } catch (Exception e) {
		// e.printStackTrace();
		// SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd");
		// Date curDate = new Date(System.currentTimeMillis());
		// String str = formatter.format(curDate);
		// return str;
		// }
	}

	public static String getTime2() {
		SimpleDateFormat formatter = new SimpleDateFormat("HH");
		Date curDate = new Date(System.currentTimeMillis());
		String str = formatter.format(curDate);
		return str;
	}


	/**
	 * 返回当前程序版本名
	 */
	public static String getAppVersionName(Context context) {
		String versionName = "";
		try {
			// ---get the package info---
			PackageManager pm = context.getPackageManager();
			PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
			versionName = pi.versionName;
			// versioncode = pi.versionCode;
			if (versionName == null || versionName.length() <= 0) {
				return "";
			}
		} catch (Exception e) {
			Log.e("VersionInfo", "Exception", e);
		}
		return versionName;
	}

	/***
	 *
	 * @param str
	 * @return 若值为空返回“－”
	 */
	public static String upStr(String str) {
		if (null == str || "".equals(str)) {
			return "-";
		}
		return str;
	}

	/***
	 *
	 * @param str
	 * @return 若值为空返回“0”
	 */
	public static String upStr0(String str) {
		if (null == str || "".equals(str)) {
			return "0";
		}
		return str;
	}

	/***
	 *
	 * @param str
	 * @return 若值为空返回“”
	 */
	public static String upStrnull(String str) {
		if (null == str || "".equals(str) || "null".equals(str) || "anyType{}".equals(str)) {
			return "";
		}
		return str;
	}

	/**
	 * 若空显示为未完成
	 *
	 * @param str
	 * @return
	 */
	public static String upStrstatus(String str) {
		if (null == str || "".equals(str)) {
			return "未完成";
		}
		return str;
	}

	/**
	 * string转double
	 *
	 * @param str
	 * @return
	 */
	public static String strTDTS(String str) {
		String rates = "-";
		if (!"".equals(str)) {
			NumberFormat nFromat = NumberFormat.getPercentInstance();
			rates = nFromat.format(Double.valueOf(str));
		}
		return rates;
	}

	/**
	 * toast
	 *
	 * @param context
	 * @param value
	 *            输出内容
	 */
	public static void toast(Context context, String value) {
		Toast.makeText(context, value, Toast.LENGTH_SHORT).show();
	}

	/**
	 *
	 * @param context
	 * @param value
	 * @param time
	 *            时间／秒
	 */
	public static void toast(Context context, String value, int time) {
		Toast.makeText(context, value, time).show();
	}

	/**
	 * 发送邮件
	 *
	 * @param filepath
	 *            要发送的文件的路径
	 * @param context
	 * @param sendlistfor
	 *            接受人名单数组
	 */
	public static void sendMail(String filepath, Context context, List<String> sendlistfor) {
		String[] array = (String[]) sendlistfor.toArray(new String[sendlistfor.size()]);
		Intent email = new Intent(Intent.ACTION_SEND);
		File file = new File(filepath + "13238231");// 附件
		email.setType("application/octet-stream");// 邮件发送类型：带附件的邮件
		String emailTitle = "安装项目邮件发送联调测试文件";
		String emailContent = "内容";
		email.putExtra(Intent.EXTRA_EMAIL, array);// 设置邮件地址
		email.putExtra(Intent.EXTRA_SUBJECT, emailTitle);// 设置邮件标题
		email.putExtra(Intent.EXTRA_TEXT, emailContent);// 设置发送的内容
		email.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));// 附件
		context.startActivity(Intent.createChooser(email, "请选择邮件发送软件"));// 调用系统的邮件系统
	}

	/**
	 * string 转 date
	 *
	 * @param date
	 */
	public static Date StringToDate(String date) throws Exception {
		return new SimpleDateFormat("yyyy/MM/dd").parse(date);
	}

	/**
	 *
	 * @param date
	 * @return
	 */
	public static String DateToString(Date date) {
		return (new SimpleDateFormat("yyyy/MM/dd")).format(date);
	}



	public static String saveMyBitmap(Bitmap mBitmap, String imgpath) {
		File f = new File(imgpath);
		FileOutputStream fOut = null;
		try {
			fOut = new FileOutputStream(f);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, fOut);
		try {
			fOut.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			fOut.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return imgpath;
	}

	/**
	 * 验证手机格式
	 */
	public static boolean isMobileNO(String mobiles) {
		/*
		 * 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
		 * 联通：130、131、132、152、155、156、185、186 电信：133、153、180、189、（1349卫通）
		 * 总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
		 */
		String telRegex = "[1][358]\\d{9}";// "[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
		if (TextUtils.isEmpty(mobiles))
			return false;
		else
			return mobiles.matches(telRegex);
	}

}
